package com.bz.backend.item.feign;

import com.bz.backend.item.feign.fallback.CommonItemFeignClientFallbackFactory;
import com.bz.pojo.TbItem;
import com.bz.pojo.TbItemCat;
import com.bz.pojo.TbItemDesc;
import com.bz.pojo.TbItemParam;
import com.bz.pojo.TbItemParamItem;
import com.bz.utils.PageResult;
import com.bz.vo.ItemVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 命令规范 服务名称 + FeignClient
 */
@FeignClient(value = "common-item",fallbackFactory = CommonItemFeignClientFallbackFactory.class)
public interface CommonItemFeignClient {

    //--------------------------- /service/item --------------------------
    /**
     * 分页查询商品
     * @param page
     * @param rows
     * @return
     */
    @GetMapping("/service/item/selectTbItemAllByPage")
    PageResult selectTbItemAllByPage(@RequestParam("page") Integer page,@RequestParam("rows") Integer rows);

    /**
     * 新增商品
     * @param tbItem
     * @return
     */
    @PostMapping("/service/item/insertTbItem")
    Integer insertTbItem(@RequestBody TbItem tbItem);

    /**
     * 删除商品
     * @param tbItem
     * @return
     */
    @PostMapping("/service/item/deleteItemById")
    Integer deleteItemById(@RequestBody TbItem tbItem);

    /**
     * 根据商品ID查询商品，商品分类，商品描述，商品规格参数
     * @param itemId
     * @return
     */
    @GetMapping("/service/item/preUpdateItem")
    ItemVo preUpdateItem(@RequestParam("itemId") Long itemId);

    /**
     * 更新商品
     * @param tbItem
     * @return
     */
    @PostMapping("/service/item/updateItem")
    Integer updateItem(@RequestBody TbItem tbItem);

    //--------------------------- /service/itemCategory --------------------------
    /**
     * 根据分类id查询子分类
     * @param id
     * @return
     */
    @GetMapping("/service/itemCategory/selectItemCategoryByParentId")
    List<TbItemCat> selectItemCategoryByParentId(@RequestParam("id") Long id);

    //--------------------------- /service/itemParam --------------------------
    /**
     * 根据商品分类ID查询规格参数模板
     * @param itemCatId
     * @return
     */
    @GetMapping("/service/itemParam/selectItemParamByItemCatId")
    TbItemParam selectItemParamByItemCatId(@RequestParam("itemCatId") Long itemCatId);

    /**
     * 分页查询所有商品规格参数模板
     * @param page
     * @param rows
     * @return
     */
    @PostMapping("/service/itemParam/selectItemParamAll")
    PageResult selectItemParamAll(@RequestParam("page") Integer page,@RequestParam("rows") Integer rows);

    /**
     * 根据商品分类添加规格参数模板
     * @param tbItemParam
     * @return
     */
    @PostMapping("/service/itemParam/insertItemParam")
    Integer insertItemParam(@RequestBody TbItemParam tbItemParam);

    /**
     * 根据规格参数模板的ID删除数据
     * @param id
     * @return
     */
    @GetMapping("/service/itemParam/deleteItemParamById")
    Integer deleteItemParamById(@RequestParam("id") Long id);

    //--------------------------- /service/itemDesc --------------------------
    /**
     * 新增商品描述
     * @param tbItemDesc
     * @return
     */
    @PostMapping("/service/itemDesc/insertItemDesc")
    Integer insertItemDesc(@RequestBody TbItemDesc tbItemDesc);

    /**
     * 更新商品描述
     * @param tbItemDesc
     * @return
     */
    @PostMapping("/service/itemDesc/updateItemDesc")
    Integer updateItemDesc(@RequestBody TbItemDesc tbItemDesc);

    //--------------------------- /service/itemParamItem --------------------------

    /**
     * 新增商品规格参数
     * @param tbItemParamItem
     * @return
     */
    @RequestMapping("/service/itemParamItem/insertTbItemParamItem")
    Integer insertTbItemParamItem(@RequestBody TbItemParamItem tbItemParamItem);

    /**
     * 更新商品规格参数
     * @param tbItemParamItem
     * @return
     */
    @PostMapping("/service/itemParamItem/updateTbItemParamItem")
    Integer updateTbItemParamItem(@RequestBody TbItemParamItem tbItemParamItem);
}
